home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / GNU_C++ / LIB / CFLIB-11.LZH / src / cookie.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-09-19  |  1.2 KB  |  83 lines

  1. #include "intern.h"
  2.  
  3. #ifdef __MINT__
  4.  
  5. #include <sys/cookie.h>
  6.  
  7. int getcookie(char *cookie, long *p_value)
  8. {
  9.     long    v;
  10.     int    i;
  11.     union
  12.     {
  13.         long    as_long;
  14.         char    as_char[4];
  15.     } cast;
  16.  
  17.     /* genialer Cast, oder? :-)) */
  18.     cast.as_char[0] = cookie[0];
  19.     cast.as_char[1] = cookie[1];
  20.     cast.as_char[2] = cookie[2];
  21.     cast.as_char[3] = cookie[3];
  22.  
  23.     i = Getcookie(cast.as_long, &v);
  24.     if (p_value)
  25.         *p_value = v;
  26.  
  27.     return (i == C_FOUND);
  28. }
  29.  
  30. #else
  31.  
  32. static long    *my_cookiejar = NULL;
  33.  
  34. static long get_cookie_adr(void)
  35. {
  36.     my_cookiejar = *((long **) 0x5A0L);
  37.     return 0L;
  38. }
  39.  
  40.  
  41. int getcookie(char *cookie, long *p_value)
  42. {
  43.     long    *cookiejar, c;
  44.     int    i;
  45.     union
  46.     {
  47.         long    as_long;
  48.         char    as_char[3];
  49.     }        cast;
  50.     
  51.     if (my_cookiejar == NULL)
  52.         Supexec(get_cookie_adr);
  53.  
  54.     cookiejar = my_cookiejar;
  55.         
  56.     if (!cookiejar || !cookiejar[0])
  57.         return FALSE;
  58.  
  59.     /* Ein einfacherer Cast fiel mir nicht ein :-)) */
  60.     for (i = 0; i<4; i++)
  61.         cast.as_char[i] = cookie[i];
  62.     c = cast.as_long;
  63.  
  64.     do
  65.     {
  66.         if (cookiejar[0] == c)
  67.         {
  68.             if (p_value)
  69.                 *p_value = cookiejar[1];
  70.             return TRUE;
  71.         }
  72.         else
  73.             cookiejar = &(cookiejar[2]);
  74.     }
  75.     while (cookiejar[0] || !cookie);
  76.  
  77.     if (p_value)
  78.         *p_value = 0;
  79.     return FALSE;
  80. }
  81.  
  82. #endif
  83.